﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcadPos.Entity;
using System.Data;
using AcadPosApp.Utilidades;

namespace AcadPosApp.Cadastros
{
    public partial class CadastroCalendarioAula : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregaEstados();
                ddlEstadoPesquisa.SelectedValue = "1";
                carregaPolo();
            }

        }

        private void carregaEstados()
        {
            ddlEstadoCad.DataSource = ddlEstadoPesquisa.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstadoCad.DataTextField = ddlEstadoPesquisa.DataTextField = "ESTADO";
            ddlEstadoCad.DataValueField = ddlEstadoPesquisa.DataValueField = "ID_ESTADO";
            ddlEstadoPesquisa.DataBind();
            ddlEstadoCad.DataBind();            
        }

        private void carregaPolo()
        {
            Polo polo = new Polo();
            polo.IdEstado = Convert.ToInt32(ddlEstadoPesquisa.SelectedValue);
            DataTable dt = ControlClass.CNPolo.listaPolosEstado(polo);
            ddlPoloPesquisa.DataSource = dt;
            ddlPoloPesquisa.DataTextField = "DESCRICAO";
            ddlPoloPesquisa.DataValueField = "ID_POLO";
            ddlPoloPesquisa.DataBind();
            if (dt.Rows.Count > 0)
            {
                ddlPoloPesquisa.Enabled = true;
            }
            else
                ddlPoloPesquisa.Enabled = false;
        }

        private void carregaPoloCad()
        {
            Polo polo = new Polo();
            polo.IdEstado = Convert.ToInt32(ddlEstadoCad.SelectedValue);
            DataTable dt = ControlClass.CNPolo.listaPolosEstado(polo);
            ddlPoloCad.DataSource = dt;
            ddlPoloCad.DataTextField = "DESCRICAO";
            ddlPoloCad.DataValueField = "ID_POLO";
            ddlPoloCad.DataBind();
            if (dt.Rows.Count > 0)
            {
                ddlPoloCad.Enabled = true;
            }
            else
                ddlPoloCad.Enabled = false;
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            carregarCalendario();
        }

        private void carregarCalendario()
        {
            DateTime pDataIni;
            DateTime pDataFim;
            int pPolo = Convert.ToInt32(ddlPoloPesquisa.SelectedValue);

            try
            {
                pDataIni = Convert.ToDateTime(TxtDataIniPesq.Text);
                pDataFim = Convert.ToDateTime(TxtDataFimPesq.Text);
            }
            catch (Exception)
            {
                pDataIni = Convert.ToDateTime(DateTime.Now.AddDays(-1));
                pDataFim = Convert.ToDateTime(DateTime.Now);
            }
            
            gvwCalendario.DataSource = ControlClass.CNCalendario.listarCalendario(pPolo, pDataIni, pDataFim);
            gvwCalendario.DataBind();
        }

        protected void gvwCalendario_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[6].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[6].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[6].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[6].Visible = false;
            }
            #endregion
        }

        protected void gvwCalendario_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton l = (ImageButton)e.Row.FindControl("imgExcluir");
                l.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void ddlEstadoPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaPolo();
        }

        protected void gvwCalendario_SelectedIndexChanged(object sender, EventArgs e)
        {
            pnlHorarioData.Visible = true;
            carregarHorariosXData();
        }

        private void carregarHorariosXData()
        {
            int pIdCalendario = Convert.ToInt32(gvwCalendario.SelectedDataKey["ID_CALENDARIO"]);
            gvwHoraDatas.DataSource = ControlClass.CNCalendario.listarHorariosXCalendario(pIdCalendario);
            gvwHoraDatas.DataBind();
        }

        protected void gvwHoraDatas_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton l = (ImageButton)e.Row.FindControl("imgExcluir");
                l.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwHoraDatas_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlConsulta.Enabled = true;
            pnlCadastroCalendario.Visible = false;
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                int pIdPolo = Convert.ToInt32(ddlPoloCad.SelectedValue);
                DateTime pData = Convert.ToDateTime(TxtDataCad.Text);
                string pSituacao = ddlSituacao.SelectedValue;
                string usuario = User.Identity.Name;

                if (btnConfirmar.CommandName == "Incluir")
                {
                    if (!ControlClass.CNCalendario.dataJaCadastrada(pData))
                    {
                            if (ControlClass.CNCalendario.inserirDataCalendario(pIdPolo, pData, pSituacao, usuario))
                        {
                            carregarCalendario();
                            pnlCadastroCalendario.Visible = false;
                            pnlConsulta.Enabled = true;
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        }
                        else
                        {
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                        }
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Data já cadastrada.")), true);
                        TxtDataCad.Text = "";
                    }                    
                }
                else if (btnConfirmar.CommandName == "Alterar")
                {
                    int pIdCalendario = Convert.ToInt32(ViewState["ID_CALENDARIO"]);
                    if (ControlClass.CNCalendario.alterarDataCalendario(pIdCalendario, pIdPolo, pData, pSituacao, usuario))
                    {
                        carregarCalendario();
                        pnlCadastroCalendario.Visible = false;
                        pnlConsulta.Enabled = true;
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception)
            {

            }
        }

        protected void btnInserir_Click(object sender, EventArgs e)
        {            
            pnlCadastroCalendario.Visible = true;
            TrustX.Util.UtilForm.LimparCampos(pnlCadastroCalendario);
            btnConfirmar.CommandName = "Incluir";
            ddlEstadoCad.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstadoCad.DataTextField = "ESTADO";
            ddlEstadoCad.DataValueField = "ID_ESTADO";
            ddlEstadoCad.DataBind();
            ddlEstadoCad.Items.Insert(0, "Selecione");
            ddlEstadoCad.SelectedValue = "1";
            carregaPoloCad();
            TxtDataCad.Text = DateTime.Today.ToShortDateString().Trim();
            pnlConsulta.Enabled = false;
        }

        protected void btnInserirHoraData_Click(object sender, EventArgs e)
        {
            pnlCadastroHorario.Visible = true;
            carregarHorarios();
        }

        private void carregarHorarios()
        {
            gvwHorarios.DataSource = ControlClass.CNCalendario.listaHorarios();
            gvwHorarios.DataBind();
        }

        protected void btnConfirmarHorario_Click(object sender, EventArgs e)
        {
            try
            {
                string pAlerta = string.Empty;
                foreach (GridViewRow row in gvwHorarios.Rows)
                {
                    try
                    {
                        CheckBox ckh = (CheckBox)row.FindControl("CheckBox1");
                        if (ckh.Checked)
                        {
                            int pIdCalendario = Convert.ToInt32(gvwCalendario.SelectedDataKey["ID_CALENDARIO"]);
                            int pIdHorario = Convert.ToInt32(gvwHorarios.DataKeys[row.RowIndex]["ID_HORARIO"].ToString());
                            ControlClass.CNCalendario.inserirHorario(pIdCalendario, pIdHorario);
                        }
                    }
                    catch (Exception ex)
                    {
                        pAlerta += ex.Message.ToString();
                    }

                }
                if (pAlerta != string.Empty)
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Alguns horários não foram incluídos!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                carregarHorariosXData();
                pnlCadastroHorario.Visible = false;
            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }

        protected void btnCancelarHorario_Click(object sender, EventArgs e)
        {
            pnlCadastroCalendario.Visible = false;
            pnlCadastroHorario.Visible = false;
            pnlConsulta.Enabled = true;
        }

        protected void ddlEstadoCad_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaPoloCad();
        }

        protected void gvwCalendario_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = int.Parse((String)e.CommandArgument);
                int pIdCalendario = Convert.ToInt32(gvwCalendario.DataKeys[index]["ID_CALENDARIO"].ToString());
                string usuario = User.Identity.Name;

                if (e.CommandName == "Alterar")
                {
                    DataTable dtDados = ControlClass.CNCalendario.getCalendario(pIdCalendario);
                    pnlCadastroCalendario.Visible = true;
                    ddlEstadoCad.SelectedValue = ddlEstadoPesquisa.SelectedValue;
                    carregaPoloCad();
                    ddlPoloCad.SelectedValue = dtDados.Rows[0]["ID_POLO"].ToString();
                    TxtDataCad.Text = Convert.ToDateTime(dtDados.Rows[0]["DATA_AULA"]).ToShortDateString();
                    ddlSituacao.SelectedValue = dtDados.Rows[0]["SITUACAO"].ToString();
                    btnConfirmar.CommandName = "Alterar";
                    ViewState["ID_CALENDARIO"] = pIdCalendario;
                }
                else if (e.CommandName == "Excluir")
                {
                    DataTable dtDados = ControlClass.CNCalendario.getCalendario(pIdCalendario);
                    int idPolo = Convert.ToInt32(dtDados.Rows[0]["ID_POLO"]);
                    DateTime data = Convert.ToDateTime(dtDados.Rows[0]["DATA_AULA"]);
                    string situacao = dtDados.Rows[0]["SITUACAO"].ToString();

                    if (ControlClass.CNCalendario.excluirDataCalendario(pIdCalendario, idPolo, data, situacao, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarCalendario();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK_TB_CALENDARIO_HORARIO_TB_CALENDARIO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroChaveEstrangeira, "")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }

        protected void gvwHoraDatas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = int.Parse((String)e.CommandArgument);
                int pIdCalendarioHorario = Convert.ToInt32(gvwHoraDatas.DataKeys[index]["ID_CALENDARIO_HORARIO"].ToString());
                if (e.CommandName == "Excluir")
                {
                    if (ControlClass.CNCalendario.excluirHorario(pIdCalendarioHorario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregarHorariosXData();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroChaveEstrangeira, "")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }
        
        protected void gvwCalendario_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwCalendario.PageIndex = e.NewPageIndex;
            carregarCalendario();
        }

        protected void gvwHoraDatas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwHoraDatas.PageIndex = e.NewPageIndex;
            carregarHorariosXData();
        }

        protected void gvwHorarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwHorarios.PageIndex = e.NewPageIndex;
            carregarHorarios();
        }
    }
}